/*
    自定义表单验证规则
    created by penglei on 2023/08/01
*/

// 纬度的数值范围应该在（0，90）即北纬，经度范围在（0，180）即东经，输入的经纬度应该加一个数值校验吧
// 验证经度
export const validateLon = (rule, value, callback) => {
    let reg = /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g; // 整数或小数
    // 校验必填
    // if (!value) {
    //   callback(new Error('不能为空'))
    // } else
    if (!value) {
        callback()
    } else if (!reg.test(value)) {
        callback(new Error('请输入正确数值'))
    } else if (value > 180) {
        callback(new Error('经度必须小于180'))
    } else if (value < 0) {
        callback(new Error('经度必须大于0'))
    } else if (value.indexOf(".") != -1 && value.split(".")[1].length > 6) {
        callback(new Error('最多保留六位小数'));
    } else {
        callback();
    }
};
// 验证纬度
export const validateLat = (rule, value, callback) => {
    let reg = /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g; // 整数或小数
    // 校验必填
    // if (!value) {
    //   callback(new Error('不能为空'))
    // } else
    if (!value) {
        callback()
    } else if (!reg.test(value)) {
        callback(new Error('请输入正确数值'))
    } else if (value > 90) {
        callback(new Error('纬度必须小于90'))
    } else if (value < 0) {
        callback(new Error('纬度必须大于0'))
    } else if (value.indexOf(".") != -1 && value.split(".")[1].length > 6) {
        callback(new Error('最多保留六位小数'));
    } else {
        callback();
    }
};

// 最多保留N位小数 ,N 在 options {decimals: N} 中定义
export const positivedecimals = (rule, value, callback) => {
    value = String(value);
    if (
        value.indexOf(".") != -1 &&
        (value.split(".").length > rule.options.decimals ||
            value.split(".")[0] === "" ||
            value.split(".")[1] === "")
    ) {
        callback(new Error()); //防止输入多个小数点
    } else if (value.indexOf(".") != -1 && value.split(".")[1].length > rule.options.decimals) {
        callback(new Error()); //小数点后两位
    } else {
        callback();
    }
};

// 校验是否为整数或n位小数
function validateNumber(rule, value, callback) {
    let reg = /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g; // 整数或小数
    // 如果是必须输入时，取消下面注释
    if (!value) {
        callback(new Error('不能为空'))
    } else if (!reg.test(value)) {
        callback(new Error('请输入正确数值'))
    } else if (value.indexOf(".") != -1 && value.split(".")[1].length > rule.options.decimals) {
        callback(new Error(`最多保留${rule.options.decimals}位小数`));
    } else {
        callback();
    }
}